Computing systems are capable of running a large variety of software applications and platforms. A computing system can provide an operating system allowing applications executing on the computing system to access and interact with hardware components of the computing system. Through this interaction, the software applications can accept user input and provide output, which can be presented to the user through a graphical user interface presented on a display device. Additionally, the output can be forwarded to a remote computing device.
Remote computing technologies allow users to use a computing system without being physically located at the computing system. Through remote access, users can connect to a remote computing system over a public or private network. The remote computing system may be at a data center, for example. The user can use a local computing system to send input to the remote computing system and the remote computing system can respond. Although not physically present at the remote computing system, the user can interact with the remote computing system as though the user was using the system directly.
Virtualization technologies have become widely used for sharing limited computer hardware resources. In a hardware virtualization environment, sometimes also referred to as a platform virtualization environment, one or more virtual machines can simulate a host computer with its own operating system. In particular, software executed on these virtual machines can be separated from the underlying hardware resources. As a result, virtual machines running on a same host computer can each have its own operating system. For example, a computer that is running Microsoft Windows operating system may host a virtual machine that simulates a computer running a Linux operating system, based on which Linux-based software can be executed.
Transmitting display frames across a network takes time. For example, when the user's computing device is connected over a wide area network, there might be latency and bandwidth limitations. A variety of compression techniques are used to compress the display frames for transmission so as to use less bandwidth. The compressed display frames are sent from the remote computing device to the user's computing device. The user's computing device then decompresses the received display frames for display.
A graphics encoder decomposes the display frames into lossless regions and lossy regions. Lossless regions include text or other areas that require pixel perfect quality for readability. Lossy regions include photographic or video content where quality can be sacrificed in an effort to reduce bandwidth.
Lossless regions may be encoded using a two-dimensional run length encoder (2DRLE). The output of this encoder, once decoded, produces exactly the same set of pixels as the original input, i.e., it is a lossless encoder.
A large proportion of imagery encoded by a 2DRLE consists of clear type text. Clear type text attempts to improve the appearance and smoothness of text on certain types of displays by varying the intensity of characters at the sub-pixel level. While this can produce visually pleasing results, many unique pixel shades are generated in addition to what would normally be considered 2-tone text.
From a run length encoding perspective, this added complexity results in less efficient encodings due to the lack of repeating pixels and also the extra bits required to code the unique pixel colors. Consequently, there is a need to improve the encoding efficiency of run length encoding.